home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-11-11 | 1.3 KB | 76 lines | [TEXT/ALFA] |
- # Implementation of Emacs's kill ring. This is a paste ring.
-
- if {[catch {set renamedRing}]} {
- set renamedRing 1
- rename copy oldCopy
- rename cut oldCut
- rename paste oldPaste
- }
-
- set ringDepth 10
- set ringIn 0
- set ringOut 0
-
-
- proc copy {} {
- global copyring ringDepth ringIn
-
- set len [expr {[selEnd] - [getPos]}]
- if {!$len} {
- if {[getMark] < [getPos]} {
- set text [getText [getMark] [getPos]]
- } else {
- set text [getText [getPos] [getMark]]
- }
- if {![string length $text]} return
- } else {
- set text [getSelect]
- }
- set copyring([expr {$ringIn % $ringDepth}]) $text
-
- incr ringIn
-
- oldCopy
- }
-
-
- proc cut {} {
- global copyring ringDepth ringIn
-
- set len [expr {[selEnd] - [getPos]}]
- if {!$len} {
- if {[getMark] < [getPos]} {
- set text [getText [getMark] [getPos]]
- } else {
- set text [getText [getPos] [getMark]]
- }
- if {![string length $text]} return
- } else {
- set text [getSelect]
- }
- set copyring([expr {$ringIn % $ringDepth}]) $text
-
- incr ringIn
-
- oldCut
- }
-
- proc paste {} {
- global copyring ringDepth ringIn ringOut
-
- set ringOut [expr {($ringIn - 1) % $ringDepth}]
- oldPaste
- }
-
-
- proc pastePop {} {
- global copyring ringDepth ringIn ringOut
-
- if {!$ringIn} { beep; return}
-
- set ringOut [expr $ringOut-1]
- if {$ringOut < 0} {set ringOut [expr {($ringIn-1) % $ringDepth}]}
-
- replaceText [getPos] [getMark] $copyring($ringOut)
- }
-